package Q17_08_Circus_Tower;
import java.util.ArrayList;
import java.util.*;
public class QuestionB {
// Returns longer sequence
private static ArrayList<HtWt> max(ArrayList<HtWt> seq1, ArrayList<HtWt> seq2) {
if (seq1 == null) {
return seq2;
} else if (seq2 == null) {
return seq1;
}
return seq1.size() > seq2.size() ? seq1 : seq2;
}
private static boolean canAppend(ArrayList<HtWt> solution, HtWt value) {
if (solution == null) {
return false;
}
if (solution.size() == 0) {
return true;
}
HtWt last = solution.get(solution.size() - 1);
return last.isBefore(value);
}
public static ArrayList<HtWt> longestIncreasingSeq(ArrayList<HtWt> array) {
Collections.sort(array);
ArrayList<ArrayList<HtWt>> solutions = new ArrayList<ArrayList<HtWt>>();
ArrayList<HtWt> bestSequence = null;
for (int i = 0; i < array.size(); i++) {
ArrayList<HtWt> longestAtIndex = bestSeqAtIndex(array, solutions, i);
solutions.add(i, longestAtIndex);
bestSequence = max(bestSequence, longestAtIndex);
}
return bestSequence;
}
private static ArrayList<HtWt> bestSeqAtIndex(ArrayList<HtWt> array, ArrayList<ArrayList<HtWt>> solutions, int index) {
HtWt value = array.get(index);
ArrayList<HtWt> bestSequence = new ArrayList<HtWt>();
for (int i = 0; i < index; i++) {
ArrayList<HtWt> solution = solutions.get(i);
if (canAppend(solution, value)) {
bestSequence = max(solution, bestSequence);
}
}
ArrayList<HtWt> best = (ArrayList<HtWt>) bestSequence.clone();
best.add(value);
return best;
}
public static ArrayList<HtWt> initialize() {
ArrayList<HtWt> items = new ArrayList<HtWt>();
HtWt item = new HtWt(65, 60);
items.add(item);
item = new HtWt(70, 150);
items.add(item);
item = new HtWt(56, 90);
items.add(item);
item = new HtWt(75, 190);
items.add(item);
item = new HtWt(60, 95);
items.add(item);
item = new HtWt(68, 110);
items.add(item);
item = new HtWt(35, 65);
items.add(item);
item = new HtWt(40, 60);
items.add(item);
item = new HtWt(45, 63);
items.add(item);
return items;
}
public static void printList(ArrayList<HtWt> list) {
for (HtWt item : list) {
System.out.println(item.toString() + " ");
}
}
public static void main(String[] args) {
ArrayList<HtWt> items = initialize();
ArrayList<HtWt> solution = longestIncreasingSeq(items);
printList(solution);
}
}